package com.softeem.service.impl;

import com.softeem.bean.Book;
import com.softeem.dao.BookDao;
import com.softeem.dao.impl.BookDaoImpl;
import com.softeem.service.BookService;
import com.softeem.utils.Page;

import java.sql.SQLException;
import java.util.List;

public class BookServiceImpl implements BookService {

    private BookDao bookDao = new BookDaoImpl();



    @Override
    public void saveOrUpdate(Book book)  throws SQLException {
        if( book.getId() == null || book.getId() == 0 ){
            //当book对象中的id是null或者是空字符串时.我们调用添加方法
            bookDao.addBook(book);
        }else{
            //否则我们调更新方法
            bookDao.updateBook(book);
        }
    }

    @Override
    public void deleteBookById(Integer id) throws SQLException {
        bookDao.deleteBookById(id);
    }

    @Override
    public void updateBook(Book book) throws SQLException {
        bookDao.updateBook(book);
    }

    @Override
    public Book queryBookById(Integer id) throws SQLException {
        return bookDao.queryBookById(id);
    }

    @Override
    public List<Book> queryBooks() throws SQLException {
        return bookDao.queryBooks();
    }

    /**
     * 分页方法
     * @param pageNo     当前页
     * @param pageSize   每页显示的条数
     * @return
     */
    @Override
    public Page<Book> page(int pageNo, int pageSize) throws SQLException {
        Page<Book> page = new Page<>();
        page.setPageNo(pageNo);//将参数pageNo保存到page对象
        page.setPageSize(pageSize);//将参数pageSize保存到page对象

        //获取t_book表的总记数 , 并将总记数封装到page对象中
        page.setPageTotalCount( bookDao.queryForPageTotalCount());
        //求出最大页
        if( page.getPageTotalCount() % page.getPageSize() == 0 ){
            //使用  [总记录数 / 当前页显示数量 = 总页数]
            page.setPageTotal( page.getPageTotalCount() / pageSize );
        }else{
            //如果除不净的话,就需要+1  [总记录数 / 当前页显示数量 = 总页数 + 1]
            page.setPageTotal( page.getPageTotalCount() / pageSize + 1);
        }

        //如果当前页大于最大页
        if( page.getPageNo() > page.getPageTotal() ){
            page.setPageNo(page.getPageTotal());//就将最大页设置给当前页
        }
        //如果当前页小于最小页
        if( page.getPageNo() < 1 ){
            page.setPageNo(1);//就将第一页设置给当前页
        }

        //通过当前网与每页显示数 求出 起始页
        int begin = (page.getPageNo() - 1) * page.getPageSize();
        List<Book> bookList = bookDao.queryForPageItems(begin, page.getPageSize());
        page.setItems(bookList);//将查询出来的结果集对象保存到page中
        return page;
    }

    @Override
    public Page<Book> page(int pageNo, int pageSize, String name, String author, Double min, Double max) throws SQLException {
        Page<Book> page = new Page<>();
        page.setPageNo(pageNo);//将参数pageNo保存到page对象
        page.setPageSize(pageSize);//将参数pageSize保存到page对象
        //获取t_book表的总记数 , 并将总记数封装到page对象中
        page.setPageTotalCount( bookDao.queryForPageTotalCount(name,author,min,max));
        //求出最大页
        if( page.getPageTotalCount() % page.getPageSize() == 0 ){
            //使用  [总记录数 / 当前页显示数量 = 总页数]
            page.setPageTotal( page.getPageTotalCount() / pageSize );
        }else{
            //如果除不净的话,就需要+1  [总记录数 / 当前页显示数量 = 总页数 + 1]
            page.setPageTotal( page.getPageTotalCount() / pageSize + 1);
        }
        //如果当前页大于最大页
        if( page.getPageNo() > page.getPageTotal() ){
            page.setPageNo(page.getPageTotal());//就将最大页设置给当前页
        }
        //如果当前页小于最小页
        if( page.getPageNo() < 1 ){
            page.setPageNo(1);//就将第一页设置给当前页
        }
        //通过当前网与每页显示数 求出 起始页
        int begin = (page.getPageNo() - 1) * page.getPageSize();
        List<Book> bookList = bookDao.queryForPageItems(begin, page.getPageSize(),name,author,min,max);
        page.setItems(bookList);//将查询出来的结果集对象保存到page中
        return page;
    }
}
